
package com.billdowney.qq.robot.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Encoder;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

public class Base64 {
    private static Logger logger = LoggerFactory.getLogger(Base64.class);
    //    private static final String charset = "utf-8";
    private static final String charset = "GB2312";

    /**
     * 解密
     *
     * @param data
     * @return
     * @author fanddong
     */
    public static String decode(String data) {
        try {
            if (null == data) {
                return null;
            }

            return new String(org.apache.commons.codec.binary.Base64.decodeBase64(data.getBytes(charset)), charset);
        } catch (UnsupportedEncodingException e) {
            logger.error(String.format("字符串：%s，解密异常", data));
            e.printStackTrace();
        }

        return null;
    }

    /**
     * 加密
     *
     * @param data
     * @return
     * @author fanddong
     */
    public static String encode(String data) {
        try {
            if (null == data) {
                return null;
            }
            return new String(org.apache.commons.codec.binary.Base64.encodeBase64(data.getBytes(charset)), charset);
        } catch (UnsupportedEncodingException e) {
            logger.error(String.format("字符串：%s，加密异常", data));
            e.printStackTrace();
        }

        return null;
    }


        /**
         * 将MultipartFile 图片文件编码为base64
         * @param file
         * @return
         * @throws Exception
         */
        public static String generateBase64(MultipartFile file){
            if (file == null || file.isEmpty()) {
                throw new RuntimeException("图片不能为空！");
            }
            String fileName = file.getOriginalFilename();
            String fileType = fileName.substring(fileName.lastIndexOf("."));
            String contentType = file.getContentType();
            byte[] imageBytes = null;
            String base64EncoderImg="";
            try {
                imageBytes = file.getBytes();
                BASE64Encoder base64Encoder =new BASE64Encoder();
                /**
                 * 1.Java使用BASE64Encoder 需要添加图片头（"data:" + contentType + ";base64,"），
                 *   其中contentType是文件的内容格式。
                 * 2.Java中在使用BASE64Enconder().encode()会出现字符串换行问题，这是因为RFC 822中规定，
                 *   每72个字符中加一个换行符号，这样会造成在使用base64字符串时出现问题，
                 *   所以我们在使用时要先用replaceAll("[\\s*\t\n\r]", "")解决换行的问题。
                 */
                base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
//                base64EncoderImg =  base64Encoder.encode(imageBytes);
                base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return base64EncoderImg;
        }

    }



